最近使用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
給按鈕設定快捷鍵: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();