Unsolved sometimes qt was ended forcefully, weird.
-
@circle said in sometimes qt was ended forcefully, weird.:
i didn't use QScreen, should i?
I suggest you to use it so I would say it's worth a try reading the documentation, isn't it?
-
@circle said in sometimes qt was ended forcefully, weird.:
more precisely, what i need is the size of centralwidget when it's fullscreen.
Then it doesn't sound like you should be looking at
QScreen
at all.thanks, i tried to get the real fullscreen's size in the c'tor or in the showEvent,
To get a size of widget (not the full screen, which you shouldn't be interested in) correctly it needs to be shown. If you call it too early, you get rubbish. Constructor is not the place. If in a
showEvent()
, IIRC you should call the baseshowEvent()
before you try to read the size. -
@JonB
even call the base showEvent() first, i still can't read the right size of the centralwidget.
anyway, the size is not a problem, the problem is that weird errors reported has nothing to do with the code as far as i am concerned. -
@circle said in sometimes qt was ended forcefully, weird.:
i still can't read the right size of the centralwidget.
Again: use QScreen to determine the screen size!
-
@Christian-Ehrlicher
How will knowing the screen size help this user if he want to know the central widget size? -
@JonB said in sometimes qt was ended forcefully, weird.:
if he want to know the central widget size?
my app is fullscreen always
so...
-
@Christian-Ehrlicher
So? :) The central widget is some widget in the full screen app, but there can be all sorts round the edges. So the widget itself won't be the full screen. I'm thinking like the central widget area in aQMainWindow
. I guess you're not? -
@JonB said in sometimes qt was ended forcefully, weird.:
I guess you're not?
I don't see a need for all the calculation at all - using a proper layout will make all those stuff superfluous.
-
@Christian-Ehrlicher said in sometimes qt was ended forcefully, weird.:
I don't see a need for all the calculation at all - using a proper layout will make all those stuff superfluous.
I agree! But it wasn't the question :)
-
@all,
thank you so much for your time. sorry i wasn't clear about my requirement. what i care is the centrawidget size when QMainWindow is in fullscreen.again, i am posting the code with the erros,
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); showFullScreen(); ui->dockWidget->setWidget(ui->tableWidget); ui->line1->hide(); } void MainWindow::resizeEvent(QResizeEvent *event) { QMainWindow::resizeEvent(event); // Your code here. static bool bOnlyOnce = true; if (bOnlyOnce && isVisible()) { bOnlyOnce = false; memory allocation, file reading and data initialization QFileInfo fileInfo(QCoreApplication::applicationFilePath()); if () QMessageBox::information(this, "title", QString("%1").arg(fileInfo.size())); //***sometimes crash here ??? get the size of centralwidget, prepare drawing environment ui->statusbar->addWidget(ui->lable1, 40); //***sometimes it crash here if i comment out QMessageBox line above*** ??? } }
now the QMessageBox line would crash sometimes(qtcreator says the process was ended forcefully), and if i comment out this line, the ui->statusbar line sometimes would report "Trying to construct an instance of an invalid type, type id: 1061" and the process was ended forcefully.
i haven't found any rules about "sometimes", sometimes it will crash several times continuously when i press CTRL+R, but sometimes the program works fine.
And it's working alwasys fine if i press F5 to debug the app.In addition, in the old backup version, it's working always fine. this version just has more functions after the crash point.
-
As @J-Hilk already told you 4 days ago - don't create an eventloop in a resize event!
-
@Christian-Ehrlicher
thanks, i am not 100% sure about that answer, but i will try another solution. now the question is, where do i get the size of centralwidget automatically when QMainWindows is in fullscreen (showFullScreen() in c'tor)? i tried showEvent and C'tor but failed to get the right size. -
@circle
I admit I have not tried it but I would have expected it inshowEvent()
as we discussed earlier. Could you show where you put what code for that? -
I still don't understand the need to know the size of a widget at all - your code you showed us doesn't do anything with it. Use layouts...
-
@JonB
qDebug to print the line and ui->centralwidget->width() -
@Christian-Ehrlicher
well, i am supposed to do some complicated drawings as the background based on the size of centralwidget, there maybe several different solutions and i never use layouts before. those code was migrated from windows. -
@circle said in sometimes qt was ended forcefully, weird.:
qDebug to print the line and ui->centralwidget->width()
Can you show just the few lines of code where you do this? What method it's in and where you do it.
-
@circle said in sometimes qt was ended forcefully, weird.:
i am supposed to do some complicated drawings as the background
You can't draw on a widget outside the paintEvent()...
-
@JonB said in sometimes qt was ended forcefully, weird.:
@circle said in sometimes qt was ended forcefully, weird.:
qDebug to print the line and ui->centralwidget->width()
Can you show just the few lines of code where you do this? What method it's in and where you do it.
void MainWindow::showEvent(QShowEvent * event) { QMainWindow::showEvent(event); qDebug() << "w: " << ui->centralwidget->width() << "h: " << ui->centralwidget->height(); }
-
@Christian-Ehrlicher said in sometimes qt was ended forcefully, weird.:
@circle said in sometimes qt was ended forcefully, weird.:
i am supposed to do some complicated drawings as the background
You can't draw on a widget outside the paintEvent()...
maybe paintEvent() is a better way, but i'm using eventFilter() instead (i am new to qt), more specifically, most of drawings are in the memory, such as qpixmap, qpainterpath, and they are working fine.