fc2ブログ

凛(kagring)のUE5/UE4とゲーム制作と雑記ブログ

2016 年から UE4 / 2021年から UE5 を触り始めました。勉強したもののメモ用ブログです。ゲーム制作に関するメモや雑記とか色々あります。C++ での Qt、Unity もほんの少しあります。

2014年04月 | ARCHIVE-SELECT | 2014年06月

| PAGE-SELECT | NEXT

≫ EDIT

C++ Qt QListWidget の removeItemWidget を使ったアイテム削除

Qt 4.8.5 での処理ではまったのですが
QListWidget には QListWidgetItem ひとつを削除する removeItemWidget という関数があります。
スロット関数などで、選択していたりするアイテムをこれで削除だ!
とおもって呼んでも何も起きないんですよね…。

というわけで調べてみるとこんな記事が。

・QListWidgetのremoveItemWidgetが期待したとおり動かない
http://milukiriu2010.blog71.fc2.com/blog-entry-124.html

まさに自分と同じ状況でした。
これを見る限り、QListWidgetItem* を消そうとする場合、
removeItemWidget を使うのではなく、QListWidgetItem* を delete で解放するというものでした。

この通りやってみるとアイテムもリストから消えて正常に動作しているようです(苦笑)
不安はありますが正常動作しているのでいいかなぁと…。
Qt5 だと直ってるのかもしれません。

| Qt | 01:12 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

C++ Qt シグナルの停止

Qt のウィジェットを扱っている場合、シグナルとスロットでいろいろと連動することになると思います。
その場合、一気にデータをウィジェットにセットする場合など
シグナルが常に動作すると変な挙動をしてしまったりすると思います。
このシグナルを切る方法です。


// シグナルを止める
QWidget *widget;
widget->blockSignals(true);


こんな感じで止めることができます。
大体の場合、ウィンドウの子としてウィジェットを作っていると思うので
その場合は子に対して止めることで、そのウィンドウに関わる全てのシグナルを止めることができます。


// 子も含めすべてのシグナルを止める
QWidget *windowWidget;
QList< QWidget*> childList = windowWidget->findChildren< QWidget*>();
for( int i = 0; i < childList.count(); i++ ){
QWidget* widget = childList.at(i);
if( widget != nullptr ){
// シグナルを停止
widget->blockSignals(true);
}
}


こんな感じですね。
シグナルを有効にする場合は false を渡せば復帰します。
結構使う場面はでてくるんじゃないでしょうか。

| Qt | 01:01 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

C++ Qt カラーピッカー(QColorDialog)

Qt でモデルの色などを選択したかったので色々探していました。

とりあえず QColorDialog とういうものがあったので
この動画を見ながら実装してみました。



ここに書いてある

// カラー選択ダイアログ
QColor color = QClolorDialog::getColor( Qt::yellow, this );

といった書き方が一番簡単に色を取得することができます。
アルファ値も取得できるのでこれは良いですねー。

一応、上記以外の使い方をすれば、処理をとめずにリアルタイムで反映することもできます。
ここらへんは Qt の他のウィジェットと同じ使い方でできるのがよいですねー。

というわけでこんな感じに。

| Qt | 16:37 | comments:2 | trackbacks:0 | TOP↑

≫ EDIT

C++ Qt 閉じるボタンで閉じないようにする

Qt のウィンドウの右上の×ボタンで閉じなくするような処理です。

・Qtで閉じるを押しても閉じないようにしたいなとか思った
http://opamp.hatenablog.jp/entry/20120401/1333252702

このサイトを参考に…と思ったのですが、参考どころかそのままでいけました。
closeEvent を作成すればよいみたいですね。

閉じる処理を無効にして setVisible(false); とかで非表示にするとか結構使えるかも…?
あとは最小化とかでしょうか。

| Qt | 01:19 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

C++ Qt QDockWidget のドッキング無効化

Qt の QDockWidget で親ウィンドウにドッキングしないようにする方法です。

こんな感じになります。

// ウィンドウ
QtWindow::QtWindow( QWidget* parent )
: QDockWidget(parent)
{
// ドッキングを無効
this->setAllowedAreas( Qt::NoDockWidgetArea );
// 最初はDockせずにフローティングの状態にする
this->setFloating(true);
}


setAllowedAreas( Qt::NoDockWidgetArea );
これが無効化するための関数です。
setFloating(true);
この関数で初期をドッキングしないようにしておくとよいかもです。

メインウィンドウの奥にいってもらいたくないウィンドウなどを作るときになど使えるかもしれません。

| Qt | 01:09 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

C++ Qt QListWidget でチェックボックスリスト

Qt の QListWidget でチェックボックス付きのリストを扱う方法です。

・Thread: QListWidget with check box's
http://www.qtcentre.org/threads/7032-QListWidget-with-check-box-s

ここに色々書いてあるのですがフラグの変更みたいですね。


// チェックボックス付きに変更
QListWidget listWidget;
QListWidgetItem *listWidgetItem = listWidget->item(0);
listWidgetItem->setFlags(listWidgetItem->flags() | Qt::ItemIsUserCheckable);
// チェック状態変更
listWidgetItem->setCheckState(Qt::Checked);


といった感じでできるようです。

チェックボックスリスト

| Qt | 22:45 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

C++ Qt プログレスバー

Qt でのプログレスバーの表示方法です。
あまりググっても載っていなかったのでメモ。

C++ ではないですがこんな感じにできるみたいですね。

・[Python][PyQt4]QProgressBar
http://d.hatena.ne.jp/maximilianahead/20120107/1325956984

基本的にはこんな感じになります。

// プログレスバー
QProgressBar progressBar = new QProgressBar();
// 範囲を設定
progressBar->setRange( 0, 100 );
// 現在の値をセット
progressBar->setValue( 0 );


これだけでこんな感じに%も表示されます。楽ちんですね!
プログレスバー

| Qt | 21:38 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

C++ Qt ウィンドウメッセージを処理する(Qt5)

自分ではないですが、Qt5 がでて、そちらだと
ウィンドウメッセージの処理の仕方がちがうということを言っていたのでメモ。

・help with QAbstractNativeEventFilter
https://qt-project.org/forums/viewthread/33219

英語なのであんまり言ってることはわかりませんが(苦笑)
Qt4 では QApplication を継承して関数をオーバーライドしてたのに対して
Qt5 では QAbstractNativeEventFilter を継承して関数をオーバーライドして
QApplication にアタッチする。

といった方法をとるようですね。

| Qt | 15:38 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

C++ Qt ウィンドウメッセージを処理する

Qt でウィンドウメッセージを処理する方法です。

・[Qt4] QDockWidgetのアクティブ動作をWindows標準にする
http://anilasoft.jp/2011/08/qt4-qdockwidget-for-windows/

この記事の「●本題! Qtアプリにこの動作を実装してみる」というところが分かりやすいですね。

virtual winEventFilter(MSG *message, long *result)

という関数をオーバーライドして処理することになります。
Qt は結構オーバーライドしてガンバレという仕組みなのですかね。

ちなみにこれ罠なのが「QApplication」を継承したもので記述するということなので気をつけてください。
ウィンドウを継承して記述するのじゃないのが結構不思議な感じはしますね…。

| Qt | 22:29 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

C++ Qt ドラッグ&ドロップで複数のファイルを受け取る

Qt でのドラッグ&ドロップで複数ファイルを受け取る処理です。
ドラッグ&ドロップについては下記のサイトが参考になります。

・( Qt C++ )メインウィンドウでドラッグ&ドロップを受け付ける
http://memotiyou.blogspot.jp/2012/01/qt-c_7798.html

基本は継承したクラスで関数を記述するだけで行けるようですね。
で、このコードだと一つしか受け取っていないので複数の時はこういう感じにします。

// ドロップイベント
void dropEvent(QDropEvent *e)
{
if (e->mimeData()->hasUrls()){
QList urlList = e->mimeData()->urls();
for (int i = 0; i < urlList.size(); i++){
listViewFile->addItem(urlList[i].toLocalFile().toLocal8Bit());
}
}
}


このコードでは QListView にドロップされたファイル名を追加しています。

こんな感じで大丈夫のようです。

| Qt | 00:33 | comments:0 | trackbacks:0 | TOP↑

| PAGE-SELECT | NEXT