Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: neosapient от Сентябрь 09, 2008, 13:08



Название: Как организовать Ctrl+C в диалоге QDialog ?
Отправлено: neosapient от Сентябрь 09, 2008, 13:08
День добрый.

Есть диалоговое окно (QMainDialog, наследник QDialog) загружаемое из ресурсов UI::QMainDialog - стандартная схема.
В этом окне есть таблица, типа QTableWidget.

Написал свой слот void QMainDialog::copy (void). В нем производиться копирование содержимого всех ячеек в буфер обмена.

Проблема в том, как создать обработчик "CTRL+C" и подсоединить его к моему слоту ?
В QMainWindow это делается легко через QAction (и меню), но для QDialog такой вариант не подошел, так как не могу понять где и как зарегисрировать QAction в моем классе QMainDialog.


Название: Re: Как организовать Ctrl+C в диалоге QDialog ?
Отправлено: developer от Сентябрь 09, 2008, 13:41
В ассистансе есть следующее:
Код:
openAct = new QAction(QIcon(":/images/open.png"), tr("&Open..."), this);
openAct->setShortcut(tr("Ctrl+O"));
openAct->setStatusTip(tr("Open an existing file"));
connect(openAct, SIGNAL(triggered()), this, SLOT(copy()));

А также QAction можна назначать openAct->setShortcut( const QKeySequence & shortcut ), где QKeySequence есть нужная комбинация.
Правда сам не пробовал.


Название: Re: Как организовать Ctrl+C в диалоге QDialog ?
Отправлено: neosapient от Сентябрь 09, 2008, 13:57
У меня код выглядит так

Код:
QMainDialog::QMainDialog(QWidget *parent)
    : QDialog(parent)
{
    setupUi(this);
    copyAction = new QAction(tr("&Copy"), this);
    copyAction->setShortcut(tr("Ctrl+C"));
    connect(copyAction, SIGNAL(triggered()), this, SLOT(copy()));
}

Но он не работает. В чем может быть ошибка ?


Название: Re: Как организовать Ctrl+C в диалоге QDialog ?
Отправлено: ритт от Сентябрь 09, 2008, 14:30
tr("Ctrl+C")...оба хороши - прям как дети малые
читать про QKeySequence

по теме: точно не уверен (и в код сейчас лезть лениво) - можно попробовать
Код:
//snip
    connect(copyAction, SIGNAL(triggered()), this, SLOT(copy()));
    addAction(copyAction);
}

если не поможет, тогда уж, так и быть, полезу в код :)


Название: Re: Как организовать Ctrl+C в диалоге QDialog ?
Отправлено: lit-uriy от Сентябрь 09, 2008, 14:33
глянь в сторону QShortcut
и QShortcut::setKey(Qt::CTRL + Qt::Key_C);


Название: Re: Как организовать Ctrl+C в диалоге QDialog ?
Отправлено: neosapient от Сентябрь 09, 2008, 14:35
>> addAction(copyAction);

Действительно, не добавил QAction   ;)
Спасибо!
Хорошо отдохнул в конце лета, всё из головы вылетело


Название: Re: Как организовать Ctrl+C в диалоге QDialog ?
Отправлено: Admin от Сентябрь 09, 2008, 15:11
я так отдохнул, что только на 3 неделю работать себя заставил.


Название: Re: Как организовать Ctrl+C в диалоге QDialog ?
Отправлено: ритт от Сентябрь 09, 2008, 19:13
превратим эту ветку в рассказы о летнем отдыхе?
с удовольствием хотя бы послушаю про отдых :)

>>> addAction(copyAction);
и что, помогло?


Название: Re: Как организовать Ctrl+C в диалоге QDialog ?
Отправлено: Пантер от Сентябрь 09, 2008, 19:34
Давайте превращать. ;) У меня отпуск только послезавтра начинается и летом я уже никуда не поеду. :-D А лето прошло все в работе.
А по теме, можно вообще на крайняк грубо перехват сделать.