Qtの開発経験のヒント71-80

  1. 我々はQListに、QStringList、QByteArrayおよびその他のリンクリストや配列を使用するプロセスでは、値のみではなく、割り当てた場合、それが強く公式プログラムブック「C ++ GUI Qtの中()の値ではなく、[]演算子、4で使用することをお勧めします(第二版)、書籍が説明に重点を持っている比較演算子は(で使用して効率的な動作を高速化するとして、それは、非常に権威あるので」、この教科書の原作者は、コアスタッフのQtの開発で書かれると言われている)と、使用[]オンラインユーザーが存在し、このような比較をしました。説明オリジナルの212ページの本では、:Qtのすべてのコンテナおよび多くの他のクラスのための暗黙の共有を使用して、共有はQtは順番に暗黙のうちに共有するために、データはそれを確実にするためにレプリケートされません変更したくない暗黙的ですロールプレイは最高のために、次の2つの新しいプログラミング習慣を使用することができます。第一の容器は、Aに表示されるかどうかはQt []演算子を区別できないので、オペレータ[]なし()関数で使用して、ベクターまたはリスト(非常に量)への読み取り専用アクセスのために通例であります左または右に譲渡、彼は最悪が起こると深い割り当てを強制すると仮定し、()関数で割り当ての左側に表示されるように許可されていません。

  2. ダイアログウィンドウの場合は、execの後に他のコードを継続できるようにする必要があり、それ以外の場合は、フォームのメッセージを詰まらせるだろう、ダイアログウィンドウのexecの前にコードの行を追加します。
QDialog dialog;
dialog.setWindowModality(Qt::WindowModal);
dialog.exec();
  1. Qtのオブジェクトクラスを削除しても安全は、それが強くdeleteLaterは、適切な時期にリリースされることを選択しますと、直ちに解放を削除させていただきますので、代わりに削除のdeleteLaterを使用することをお勧めします、おそらく間違ってクラッシュすることがあります。あなたは、コレクションにバルク削除のオブジェクトにしたい場合は、そのようqDeleteAll(btns)として、qDeleteAllを使用することができます。

  2. QTableView制御では、等他のモードカラムカスタムボタン、チェックボックス、ドロップダウンボックスが表示され、必要に応じて、カラムを無効にすることが望ましい場合には、カスタムデリゲート関数の戻りが過負荷createEditor QItemDelegateを採用することができるカスタムデリゲートを達成するために0とすることができます。カスタムあなたが常に表示させたい場合は、編集モードが表示されますを入力するときにコントロールを対応する委任、あなたは描画するdrawPrimitiveまたはdrawControlとペイント機能を無効にする必要があります。

  3. いくつかの方法はQApplicationは::スタイル()drawPrimitive、drawControl、drawItemText、他に精通drawItemPixmap、その後、結合特性QStyleOption対応し、楽しい様々なカスタムを委任することができ、また、様々な機能をペイントする直接画家を使用することができます絶対に揚げ日を巨根、高速なハードウェアテーブル、ツリーリスト、ドロップダウンボックスなどの様々なを描きます。QApplication ::スタイル() - 設定されていない場合>第四パラメータdrawControl、アプリケーションが制御スタイルシートから引き出されることはありません。

  4. 心座標、すべてのものが再び理解し、カスタムコントロールを描画するために学習するとき、関数qpainter.hは、すべてのヘッダファイルを読んで、もう一度試して強くお勧めします、画家あり、この辺は、内蔵されたインターフェイスのすべてのQtのために描かれて含まれてい対応するパラメータは、それは非常に、マジックペン馬梁一般的なように、あなたの図面に関心を刺激テン描かれたコードの崩壊が世界を旅乗っただろう、あなたは新世界の多くを見つけるでしょう、それらを試してみてください。

  5. 時には、中心が、デフォルトは左揃え、および自動的に埋めるためにストレッチしませんされていないコントロールのセット完璧プログラマの追求見つけ、中にsetItemWidgetまたはsetCellWidgetを使用するプロセスでは、これは良いを見ていないことがあり、究極の解決策はそう、あなたの完璧なソリューションということ、そして、そのようなコントロールは、より複雑なコントロールを生成するために組み合わせることができることは、ウィジェットのレイアウト上でこのコントロール普遍的であり、そしてその項目にウィジェットを追加します。
//实例化进度条控件
QProgressBar *progress = new QProgressBar;
//增加widget+布局巧妙实现居中
QWidget *widget = new QWidget;
QHBoxLayout *layout = new QHBoxLayout;
layout->setSpacing(0);
layout->setMargin(0);
layout->addWidget(progress);
widget->setLayout(layout);
ui->tableWidget->setCellWidget(0, 0, widget);
  1. 多くの場合、既知の背景色の場合に必要な、クリアテキスト、対応するテキストの色を計算するために、この時間の必要性を描画することができます。
//根据背景色自动计算合适的前景色
double gray = (0.299 * color.red() + 0.587 * color.green() + 0.114 * color.blue()) / 255;
QColor textColor = gray > 0.5 ? Qt::black : Qt::white;
  1. QTableViewまたはQTableWidgetドラッグの無効列。
#if (QT_VERSION <= QT_VERSION_CHECK(5,0,0))
    ui->tableView->horizontalHeader()->setResizeMode(0, QHeaderView::Fixed);
#else
    ui->tableView->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Fixed);
#endif
  1. DEFINES + =:Qt4版からQt5に、方法のいくつかの種類が放棄または廃止された、あなたはQt4をメソッドにしたい場合は、このようなsetMovableのQHeadVewとして、Qt5で有効になっている、あなたはプロまたはPRIファイルに行を追加することができますQT_DISABLE_DEPRECATED_BEFORE = 0

おすすめ

転載: www.cnblogs.com/feiyangqingyun/p/12056844.html