crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> QDialog, button, dialog
Гость_Akniyet_*
сообщение 1.3.2012, 18:04
Сообщение #1





Гости








    


Всем доброго времени суток! Хотела попросить вас о помощи. Скажите, пожалуйста, как сделать так, чтобы при нажатии Ctrl+R появился widget и в нем кнопка "ок" и при нажатии на "ок" появилось другое диалоговое окно? Спасибо.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 1.3.2012, 19:57
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Можно создать "Действие" (QAction), назначить ему комбинацию горячих клавиш.
И установить это Действие для виджета (QWidget->setAction(...)), который видно в начальный момент времени.
Сигнал действия triggered связать со слотом выше указанного виджета, а в слоте создавать интересующий тебя виджет.
Так появится первый виджет.

Ну а дальше смотри по форуму, темы про то, как по кнопке показать диалог.
Изъезженно.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
akoska
  опции профиля:
сообщение 1.3.2012, 20:05
Сообщение #3


Новичок


Группа: Новичок
Сообщений: 4
Регистрация: 1.3.2012
Пользователь №: 3244

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(Litkevich Yuriy @ 1.3.2012, 20:57) *
Можно создать "Действие" (QAction), назначить ему комбинацию горячих клавиш.
И установить это Действие для виджета (QWidget->setAction(...)), который видно в начальный момент времени.
Сигнал действия triggered связать со слотом выше указанного виджета, а в слоте создавать интересующий тебя виджет.
Так появится первый виджет.

Ну а дальше смотри по форуму, темы про то, как по кнопке показать диалог.
Изъезженно.



Вот мой весь код, который при компиляции показывает сразу два окна: окно с кнопкой и другое диалоговое окно с комбобоксами и радиобаттонами.
#include "dialog.h"

Dialog::Dialog(QWidget *parent)
: QDialog(parent)
{
QWidget *widget = new QWidget;
QPushButton *btn = new QPushButton("OK");
btn->show();

widget->show();

label = new QLabel("Printer: ");
cbox = new QComboBox();
cbox->addItem("Office Printer");
cbox->addItem("Printer Canon");
cbox->addItem("Printer HP Laser Jet");
cbox->setFixedSize(200,25);

QHBoxLayout *toplayout = new QHBoxLayout;
toplayout->addWidget(label);
toplayout->addWidget(cbox);

rbtn1 = new QRadioButton("Landscape");
rbtn2 = new QRadioButton("Portrait");

QVBoxLayout *grouplayout = new QVBoxLayout;
gbox1 = new QGroupBox("Page Orientation");
grouplayout->addWidget(rbtn1);
grouplayout->addWidget(rbtn2);
gbox1->setLayout(grouplayout);

rbtn3 = new QRadioButton("Black and White");
rbtn4 = new QRadioButton("Color");

QVBoxLayout *grouplayout1 = new QVBoxLayout;
gbox2 = new QGroupBox("Color Options");
grouplayout1->addWidget(rbtn3);
grouplayout1->addWidget(rbtn4);
gbox2->setLayout(grouplayout1);

QHBoxLayout *middlelayout = new QHBoxLayout;
middlelayout->addWidget(gbox1);
middlelayout->addWidget(gbox2);

btn1 = new QPushButton("Print");
btn2 = new QPushButton("Cancel");

QObject::connect(btn2,SIGNAL(clicked()), this,SLOT(reject()));

QHBoxLayout *bottomLayout = new QHBoxLayout;
bottomLayout->addSpacerItem(new QSpacerItem(100,10));
bottomLayout->addWidget(btn1);
bottomLayout->addWidget(btn2);

QVBoxLayout *outerlayout = new QVBoxLayout;
outerlayout->addLayout(toplayout);
outerlayout->addLayout(middlelayout);
outerlayout->addLayout(bottomLayout);

setLayout(outerlayout);
}

Dialog::~Dialog()
{

}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Ov3r1oad
  опции профиля:
сообщение 2.3.2012, 11:16
Сообщение #4


Студент
*

Группа: Участник
Сообщений: 19
Регистрация: 21.12.2011
Пользователь №: 3085

Спасибо сказали: 0 раз(а)




Репутация:   0  


Не хочу плодить темы, поэтому задам вопрос здесь: как сделать так, чтобы после нажатия на кнопку окно не закрывалось? Я просто в слоте, который реагирует на сигнал нажатия этой кнопки, ставлю команду open(), чтобы окно открылось снова. Но на линухе он его открывает в совершенно другом месте. Смотриться не очень.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Steklova Olga
  опции профиля:
сообщение 2.3.2012, 11:55
Сообщение #5


Участник
**

Группа: Участник
Сообщений: 198
Регистрация: 27.9.2011
Из: Санкт-Петербург
Пользователь №: 2912

Спасибо сказали: 5 раз(а)




Репутация:   4  


Цитата(Ov3r1oad)
как сделать так, чтобы после нажатия на кнопку окно не закрывалось?
На какую кнопку и какое окно?

Если у вас диалоговое окно и на нем QDialogButtonBox с кнопками, для которых заданы роли QDialogButtonBox::AcceptRole и QDialogButtonBox::RejectRole, то, конечно, при нажатии на такую кнопку окно закроется.
Не делайте родителем кнопки QDialogButtonBox, и будет вам счастье :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Ov3r1oad
  опции профиля:
сообщение 2.3.2012, 11:58
Сообщение #6


Студент
*

Группа: Участник
Сообщений: 19
Регистрация: 21.12.2011
Пользователь №: 3085

Спасибо сказали: 0 раз(а)




Репутация:   0  


Steklova Olga, это QProgressDialog, на нём только одна кнопка. Я просто думал, может есть какой-то хинт, чтобы окно не закрывалось. По сути, мне надо, чтобы при нажатии на одну и ту же кнопку, окно сначала не закрывалось, а потом (если опять нажать на эту кнопку), оно закрылось.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Steklova Olga
  опции профиля:
сообщение 2.3.2012, 12:36
Сообщение #7


Участник
**

Группа: Участник
Сообщений: 198
Регистрация: 27.9.2011
Из: Санкт-Петербург
Пользователь №: 2912

Спасибо сказали: 5 раз(а)




Репутация:   4  


Ov3r1oad, QProgressDialog пока не использовала. Но есть чудная вещь под названием "Справка". Смотрите:

void QProgressDialog::closeEvent ( QCloseEvent * e ) [virtual protected]
Reimplemented from QWidget::closeEvent().

void QWidget::closeEvent ( QCloseEvent * event ) [virtual protected]
This event handler is called with the given event when Qt receives a window close request for a top-level widget from the window system.
By default, the event is accepted and the widget is closed. You can reimplement this function to change the way the widget responds to window close requests. For example, you can prevent the window from closing by calling ignore() on all events.
Main window applications typically use reimplementations of this function to check whether the user's work has been saved and ask for permission before closing. For example, the Application Example uses a helper function to determine whether or not to close the window:
void MainWindow::closeEvent(QCloseEvent *event)
{
if (maybeSave()) {
writeSettings();
event->accept();
} else {
event->ignore();
}
}
See also event(), hide(), close(), QCloseEvent, and Application Example.

Цитата(Litkevich Yuriy @ 1.3.2012, 19:57) *
Можно создать "Действие" (QAction), назначить ему комбинацию горячих клавиш.
И установить это Действие для виджета (QWidget->setAction(...)), который видно в начальный момент времени.

ИМХО у QWidget нет setAction.
При создании действия указывается его родитель, например виджет:
action = new QAction(parent_widget); :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Ov3r1oad
  опции профиля:
сообщение 2.3.2012, 14:18
Сообщение #8


Студент
*

Группа: Участник
Сообщений: 19
Регистрация: 21.12.2011
Пользователь №: 3085

Спасибо сказали: 0 раз(а)




Репутация:   0  


Steklova Olga, хм, написал отдельный класс MyProgressDialog c переопределённым методом void closeEvent(QCloseEvent *event). В нём банально поставил event->ignore(). По идеи, теперь окно у меня вообще не должно закрываться, но почему-то не работает. Окошко реагирует также, как будто я ничего и не писал.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Steklova Olga
  опции профиля:
сообщение 2.3.2012, 14:22
Сообщение #9


Участник
**

Группа: Участник
Сообщений: 198
Регистрация: 27.9.2011
Из: Санкт-Петербург
Пользователь №: 2912

Спасибо сказали: 5 раз(а)




Репутация:   4  


Ov3r1oad, код покажите.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Ov3r1oad
  опции профиля:
сообщение 2.3.2012, 14:32
Сообщение #10


Студент
*

Группа: Участник
Сообщений: 19
Регистрация: 21.12.2011
Пользователь №: 3085

Спасибо сказали: 0 раз(а)




Репутация:   0  


class MyDialog: public QProgressDialog
{
Q_OBJECT

public:
MyDialog(QWidget* parent);
void closeEvent (QCloseEvent *event);
};

class MyClass
{
public:
MyDialog Dialog;
};


void MyDialog::closeEvent(QCloseEvent* event)
{
event->ignore();
}


class MyDialog: public QProgressDialog
{
Q_OBJECT

public:
MyDialog(QWidget* parent);
void closeEvent (QCloseEvent *event);
};

class MyClass
{
public:
MyDialog Dialog;
};


void MyDialog::closeEvent(QCloseEvent* event)
{
event->ignore();
}

сорь, чё-то не тот тег прописал =)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V   1 2 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 23.4.2024, 17:09