Armadilloフォーラム

QtでQMessageBoxが正しく表示できない

sasamoto

2014年5月16日 0時28分

お世話になります。

まだQtの勉強中なのでマト外れな質問をしていましたら
申し訳ございません。

MainWindow からボタンのクリックに応答して
QMessageBox::about() で簡単なポップアップの
about表示をしようと思っています。

ところが、exec() をするとポップアップするのではなく
MainWindowのサイズで表示されてしまい、ボックス
内の「OK」ボタンを押した後も、その画面でフリーズ
している状態になってしまいます。

repaint() を追加して様子を見てみましたが、やはり
フリーズされた状態に変わりはありません。

MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
this->setMaximumSize(840,480);
this->resize(840,480);
this->setGeometry(0, 0, 840, 480);

grphFrame = new QFrame(this);
grphFrame->setGeometry(139, 39, 651, 431);

button1 = new QPushButton("Btn1", this);
button1->setGeometry(150,100,100,50);
button1->setFont(QFont("Times", 20, QFont::Bold));

connect(button1, SIGNAL(clicked()), this, SLOT(about1()));
}

void MainWindow::about1(void)
{

QMessageBox::about( this, "About this program",
"This is a program for tutorial.");
}

デスクトップで動作させると、意図する動作をします。
アルマジロの場合は何か気をつけなければならないことが
あるのでしょうか?

ご教授をいただけると大変助かります。

コメント

kazuo.asano

2014年5月16日 8時18分

こんにちは
sazus@日本Qtユーザー会の一味です。
hファイルにslotsが抜けていそうです。

コンソールからの起動で
Object::connect: No such slot MainWindow::about1() in ..
Object::connect: (receiver name: 'MainWindow')
ってlogがでているなら、お試しを

class MainWindow : public QMainWindow
{
Q_OBJECT

public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();

protected slots: // <- ここ slotsが抜けてませんか?
void about1();
private:
Ui::MainWindow *ui;
QFrame *grphFrame;
QPushButton *button1;
};

ではでは

kazuo.asano

2014年5月16日 18時49分

見直したら
> ボックス内の「OK」ボタンを押した後も、その画面でフリーズ
> している状態になってしまいます。

QMessageBox::aboutは表示されていたのですね。
失礼しました><

at_ohsawa

2014年5月16日 10時15分

> その画面でフリーズしている状態になってしまいます。
Armadillo-840のシリアルコンソールから
当該のアプリケーションを実行したとき、
何かエラーメッセージ等は出力されているでしょうか?

sasamoto

2014年5月16日 19時37分

> Armadillo-840のシリアルコンソールから
> 当該のアプリケーションを実行したとき、
> 何かエラーメッセージ等は出力されているでしょうか?

アルマジロの実機に実行ファイルを転送して実行すると、コンソールには
エラーらしいものは表示されません。

-----
[root@armadillo840-0 (ttySC2) /home/ftp/pub] # QT_QPA_EGLFS_DISPLAY=1 ./test5
evdevtouch: Using device /dev/input/event0
min X:0 max X: 799
min Y:0 max Y: 479
min pressure: 0 max presure: 0
device name: st1232-touchscreen
Protocol type B (mtdev)
-----

上記のままです。

ヘッダーファイルには slots: は存在しています。

sasamoto

2014年5月16日 19時58分

> Armadillo-840のシリアルコンソールから
> 当該のアプリケーションを実行したとき、
> 何かエラーメッセージ等は出力されているでしょうか?

すみません、起動時に EGLFS_WIDTH/HGIGHT を指定したら
エラーらしきものが出ました。

This plugin does not support propagateSizeHints()

この場合は、どのように対応したらよろしいのでしょうか?

kazuo.asano

2014年5月16日 20時34分

sazusです。

Armadillo-840 のLCDをそのまま使用されているなら
800x480(WxH)みたいですね。

codeを
- this->setMaximumSize(840,480);
- this->resize(840,480);
- this->setGeometry(0, 0, 840, 480);
+ this->setMaximumSize(800,480);
+ this->resize(800,480);
+ this->setGeometry(0, 0, 800, 480);
と修正して

http://manual.atmark-techno.com/armadillo-840/armadillo-840_product_man…
にあるように

# QT_QPA_EGLFS_DISPLAY=1 QT_QPA_EGLFS_WIDTH=800 QT_QPA_EGLFS_HEIGHT=480 ./test5

と実行してみてはどうでしょうか?