Russian Qt Forum
Ноябрь 25, 2024, 13:40 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как организовать Ctrl+C в диалоге QDialog ?  (Прочитано 5474 раз)
neosapient
Гость
« : Сентябрь 09, 2008, 13:08 »

День добрый.

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

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

Проблема в том, как создать обработчик "CTRL+C" и подсоединить его к моему слоту ?
В QMainWindow это делается легко через QAction (и меню), но для QDialog такой вариант не подошел, так как не могу понять где и как зарегисрировать QAction в моем классе QMainDialog.
Записан
developer
Гость
« Ответ #1 : Сентябрь 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 есть нужная комбинация.
Правда сам не пробовал.
Записан
neosapient
Гость
« Ответ #2 : Сентябрь 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()));
}

Но он не работает. В чем может быть ошибка ?
Записан
ритт
Гость
« Ответ #3 : Сентябрь 09, 2008, 14:30 »

tr("Ctrl+C")...оба хороши - прям как дети малые
читать про QKeySequence

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

если не поможет, тогда уж, так и быть, полезу в код Улыбающийся
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #4 : Сентябрь 09, 2008, 14:33 »

глянь в сторону QShortcut
и QShortcut::setKey(Qt::CTRL + Qt::Key_C);
« Последнее редактирование: Сентябрь 09, 2008, 14:36 от lit-uriy » Записан

Юра.
neosapient
Гость
« Ответ #5 : Сентябрь 09, 2008, 14:35 »

>> addAction(copyAction);

Действительно, не добавил QAction   Подмигивающий
Спасибо!
Хорошо отдохнул в конце лета, всё из головы вылетело
« Последнее редактирование: Сентябрь 09, 2008, 14:38 от neosapient » Записан
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« Ответ #6 : Сентябрь 09, 2008, 15:11 »

я так отдохнул, что только на 3 неделю работать себя заставил.
Записан
ритт
Гость
« Ответ #7 : Сентябрь 09, 2008, 19:13 »

превратим эту ветку в рассказы о летнем отдыхе?
с удовольствием хотя бы послушаю про отдых Улыбающийся

>>> addAction(copyAction);
и что, помогло?
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #8 : Сентябрь 09, 2008, 19:34 »

Давайте превращать. Подмигивающий У меня отпуск только послезавтра начинается и летом я уже никуда не поеду. :-D А лето прошло все в работе.
А по теме, можно вообще на крайняк грубо перехват сделать.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.047 секунд. Запросов: 23.