1. 程式人生 > >最近使用QT開發的一些心得,技巧

最近使用QT開發的一些心得,技巧

    QLineEdit沒有獲得焦點和失去焦點的訊號,需要自定義一個繼承自QLineEdit的輸入框,並重寫focusInEvent以及focusOutEvent事件

protected:

    virtual void focusInEvent(QFocusEvent *e);

    virtual void focusOutEvent(QFocusEvent *e);

signals:

    void sig_focusin();

    void sig_focusout();

void MyLineEdit::focusInEvent(QFocusEvent *e)

{

    QLineEdit::focusInEvent(e);

    emit sig_focusin();

}

void MyLineEdit::focusOutEvent(QFocusEvent *e)

{

    QLineEdit::focusOutEvent(e);

    emit sig_focusout();

}

自定義控制元件中含有一個繼承自QLineEdit的輸入框,以及QLabel,給QLabel賦值時,需要獲取焦點才會重新整理顯示,在給QLabel賦值的時候,呼叫update可以解決該問題。

    QSqlTableModel連續呼叫removeColumn或者removeColumns無法達到預期的結果。

在重寫QLineEdit

virtual void keyPressEvent(QKeyEvent *event);時,不處理的鍵需要呼叫QLineEdit::keyPressEvent(event);並且都要執行QWidget::keyPressEvent(event);以免視窗也需要獲取該按鍵資訊而無法獲取到。

    給按鈕設定快捷鍵:btnCancle->setShortcut(Qt::Key_Cancel);

    直接設定快捷鍵,而不與按鈕繫結

QShortcut *shortcut = new QShortcut(QKeySequence(Qt::Key_F3),this);//快捷鍵F3繫結刪除操作

QObject::connect(shortcut, SIGNAL(activated()), this, SLOT(slt_deleteGoods()));

    需要引用:#include <QShortcut>

    通過上下鍵,聚焦視窗中的控制元件,需要重寫virtual void keyPressEvent(QKeyEvent *event);

void GoodsInfo::keyPressEvent(QKeyEvent *event)

{

switch(event->key())

{

case Qt::Key_Up:

  focusNextPrevChild(false);

break;

case Qt::Key_Down:

focusNextPrevChild(true);

break;

default:

QDialog::keyPressEvent(event);//QDialog或者QWidget視具體情況

}

}

    使得一個佈局居中的方法,通過在兩邊addStretch();

QHBoxLayout  mainLayout = new QHBoxLayout(this);

mainLayout->addStretch();

mainLayout->addLayout(layout);//layout是一個需要居中的佈局,在本例項中是QVBoxLayout型別

mainLayout->addStretch();