2015-01-26 3 views
3

У меня есть виджет информации/уведомлений, который должен отображаться, когда некоторые даже встречаются. Моя идея состояла в том, чтобы иметь виджет, который скрыт в верхнем левом углу и будет показан, когда это необходимо. Проблема в том, что если я просто поставлю там простой виджет и покажу его, все будет перемещено вправо, я хочу показать, что виджет сверху что-то в этой области (он будет скрывать, что там, но это нормально). Я не могу использовать сложный виджет, потому что информационный виджет находится в разных измерениях, чем другие виджеты. И если я просто создаю плавающий виджет и переместим его в эту область, он не переместится, если основное окно будет перемещено. Есть ли способ, как это сделать?Qt виджет, отображаемый над другими виджетами

+0

Установите родительский элемент в виджет, но не добавьте его в макет. Будет ли это работать? – thuga

+0

Я этого не пробовал, спасибо. – Dainius

ответ

0

Посмотрите QDialog создать и Exec один из них, когда происходит ваша ошибка, вы можете построить их, чтобы по умолчанию в порядке отмены кнопок с

EDIT: К сожалению, я имею в виду QMessageBos см ниже код

QMessageBox error_message(QMessageBox::Icon::Critical, "Title of the window","Some Text about the error to show the user", QMessageBox::StandardButtons(QMessageBox::Yes | QMessageBox::Cancel), this); 
error_message.exec(); 
+0

Это не ошибка, это дополнительная информация об объекте, который они вызвали действием, например углом поворота к некоторым осям. Поэтому я не могу использовать модальный диалог (и предпочитаю не использовать отдельно от главного виджета). Информация в этом виджете может быть полезна для пользователя в этот момент (или до некоторого другого действия) или может не быть (в этом случае он просто закрывается/скрывается). – Dainius

+0

Если вы используете визуальную студию, вы можете увидеть что-то подобное, если у вас есть панель инструментов справа (или слева) с функцией автоматического скрытия. Он будет проходить через существующий макет, но не влияет на него. – Dainius

+0

вы можете использовать QDialog, а затем просто создать его, а затем установить флаги для не модальных и всегда сверху, просто кажется, что это лучший способ сделать это, чем добавить еще один скрытый виджет и показать его при необходимости ... – AngryDuck

1

Просто создайте и разместите виджет «на лету». Избегайте использования пользовательского интерфейса для размещения виджета, потому что тогда позиция виджетов управляется макетами.

EDIT: Не забудьте создать виджет после инициализации диалога. Если вы не позаботитесь об этом, ваш виджет будет вставлен внизу.

class Dialog : public QDialog 
{ 
    Q_OBJECT 

    std::unique_ptr<Ui::Dialog> _ui; 
    QWidget* _widgetOnTheTop; 

    public: 
    Dialog(QWidget* parent) 
     : QDialog(parent), _ui(new Ui::Dialog) 
    { 
     _ui->setupUi(this); 

     _widgetOnTheTop = new QPushButton(this); 
     _widgetOnTheTop->setGeometry(10,10,100,35); 
     _widgetOnTheTop->show(); 
    } 
}; 
Смежные вопросы