自分がQtを使う上で知ったことなどの備忘録です。
豆知識集です。
style()->pixelMetric(QStyle::PM_ScrollBarExtent)
iconengines/qsvgicon4.dll が必要
QApplication::addLibraryPath(qApp->applicationDirPath());
if (QApplication::queryKeyboardModifiers() & Qt::ShiftModifier) {
}
ウィンドウフラグから Qt::WindowContextHelpButtonHint を除去。
例:
Qt::WindowFlags flags = windowFlags();
flags &= ~Qt::WindowContextHelpButtonHint;
setWindowFlags(flags);
ウィンドウフラグに Qt::MSWindowsFixedSizeDialogHint を付与。
例:
Qt::WindowFlags flags = windowFlags();
flags |= Qt::MSWindowsFixedSizeDialogHint;
setWindowFlags(flags);
pixel = point * QApplication::desktop()->physicalDpiY() / 72;
point = pixel * 72 / QApplication::desktop()->physicalDpiY();
コマンドライン : qmake -v
コンパイル時 : QT_VERSION_STR マクロ
実行時 : qVersion() 関数
普通のボタンと矢印ボタンが一体化したもの。
.pro ファイルに、次のように記述する。
LIBS += $$PWD/lib/mylib.lib
または、
LIBS += -L$$PWD/lib -lmylib
void MainWindow::on_action_test_triggered() { QList<QDockWidget *> dockWidgets = findChildren<QDockWidget *>(); for (int i = 0; i < dockWidgets.size(); i++) { qDebug() << dockWidgets[i]->windowTitle(); } }
出典:http://www.qtcentre.org/threads/22812-How-to-get-list-of-DockWidgets-in-QMainWindow
QTabletEvent::pos()は、時々ずれた座標を返すことがあるっぽいので、信用しない方がいい。
代わりに、mapFromGlobal(QCursor::pos())を使用する。
QIcon icon = style()->standardIcon(QStyle::SP_MessageBoxWarning);
「㈱」をはじめとした、厳密にはシフトJISではない、Windows等でコードページ932として知られる、シフトJISの亜種に対応する方法。
プログラムの開始時(main関数の初めの方で)、
putenv("UNICODEMAP_JP=cp932");
を実行しておく。その後、
QTextCodec *sjis_codec = QTextCodec::codecForName("Shift_JIS");
のように、テキストコーデックを取得する。
※ cp932 以外にも、 nec-vdc 、 ibm-vdc 、 udc など、ベンダー依存文字や、ユーザー定義文字にも対応している模様。
マウスボタンが押されたら、基底クラスが処理するより前に、選択を解除します。
void MyPlainTextEdit::mousePressEvent(QMouseEvent *e)
{
QTextCursor c = textCursor();
c.setPosition(c.selectionEnd());
setTextCursor(c);
QPlainTextEdit::mousePressEvent(e);
}
void MyWidget::paintEvent(QPaintEvent *)
{
QPainter pr(this);
QStyleOptionViewItem o;
o.state = QStyle::State_Selected | QStyle::State_Active;
o.rect = rect().adjusted(4, 4, -4, -4);
o.showDecorationSelected = true;
qApp->style()->drawPrimitive(QStyle::PE_PanelItemViewItem, &o, &pr, 0);
}
void MyTableWidget::horizontalScrollbarValueChanged(int value) { QTableWidget::horizontalScrollbarValueChanged(value); viewport()->update(); }
viewport() が肝心。
外部リンク: http://mf-atelier.sakura.ne.jp/mf-atelier/modules/tips/program/Qt/