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

Войти
 
  Начало Форум WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  
  Просмотр сообщений
Страниц: 1 2 [3] 4 5 ... 9
31  Qt / Вопросы новичков / Re: Отловить текст Action в меню. : Июнь 15, 2015, 16:50
Это вечный вопрос. С чего стоит с чего не стоит. Специально безвылазно штудировал C/C++, хотя до этого кодил, но как то спонтанно, урывками читая куски информации. Но решил так. Однако я так же специально не кропал бесполезный код примеров. Просто внимательно читал/слушал и не одну книгу и видеокурс... И шаг за шагом разбирал примеры с листа, пока не осозновал до конца. Но для этого пришлось дважды просмотреть видематериал разных точек зрения и книг, пока не прочитав от корки до корки не осознал, что наконец все ясно (во всяком случае пока читаешь нет неясностей).
Но вот практикой я сознательно не занимался, что бы не отвлекаться. Сейчас же на конкретных задачах ее и прохожу. Вроде как все ясно, но отсутствие этой самой практики заставляет сомневаться, что делаю все верно если что то сразу не пошло.
Так что не так все плохо у меня с теорией.
В этом случае что то не заладилось и конечно мне бы увидеть всего лиш одну строчку if( textAction != NULL ) было бы гораздо полезнее, что бы понять в чем ошибка без лишних дискусий.
Я же пытался притулить if( !textAction.isNull ).
Но раз вы утверждаете, что должно работать (прада как имено не говоря) значит шел в том направлении и осталось подумать, как еще можно. Проблемы то никакой нет, задачка то простенькая, но все таки это опыт. Думаю сами на подобном спотыкались.
Часто тут говорят "Мы мол не экстрасенсы", но какого начинающим? Им ведь сложне понимать с полуслова. Однако, могу сказать, что сейчас мне намного проще понять чем год назад и закрепить полученный навык.
32  Qt / Вопросы новичков / Re: Отловить текст Action в меню. : Июнь 15, 2015, 15:07
В ветке для новичков просто пытался получить чуть более конкретный ответ. Получил бы, нашел бы ошибки сразу.
Пытался я проверить с самого начала возвращаемое значение на ноль, но в одном случае допустил банальную ошибку, машинально поставил точку с запятой после условия и отмел этот вариант. isNull не оказалось такого метода, но зациклился именно на нем после неудачного первого варианта. Вот и пришлось часать репу, что не так.
В общем спасибо.
33  Qt / Вопросы новичков / Re: Отловить текст Action в меню. : Июнь 15, 2015, 13:58
Извините конечно, но что собственно проверять?
Если это:
if(!textAction->text().isNull());
Ну так проверял вылетает при проверке. Иначе бы не спрашивал.
QAction не знает такой проверки.
Что еще могу прверить на isNull?
34  Qt / Вопросы новичков / Отловить текст Action в меню. : Июнь 15, 2015, 13:11
Контекстное меню:
Код
C++ (Qt)
void paneWidget::showCustomMenu(const QPoint &pos)
{
 QMenu * arrowMenu = new QMenu( this );
 arrowMenu ->addAction( "anytext1" );
 arrowMenu ->addAction( "anytext2" );
 
 QAction * textAction = arrowMenu ->exec( m_toolButtonArrow->mapToGlobal( pos ) );
 
 qDebug() << textAction->text();
}
Если выбрать пункт меню, проблем нет. Если открыть меню и закрыть, вылетает программа.
Как правильно?
35  Qt / Вопросы новичков / Re: qStableSort - расположение своего функтора : Май 07, 2015, 05:53
Спасибо! Теперь все в полном порядке. И надеюсь окончательно осознал.
36  Qt / Вопросы новичков / Re: qStableSort - расположение своего функтора : Май 06, 2015, 11:20
Спасибо! Основное уловил.
37  Qt / Вопросы новичков / qStableSort - расположение своего функтора : Май 06, 2015, 09:50
Помогите пожалуйста разобраться. В таком виде код работает:
Код
C++ (Qt)
#include "story.h"
 
bool caseInsensitiveLessThan(const QString &s1, const QString &s2)
{
   return s1.toLower() < s2.toLower();
}
 
void Story::importFromClipboard(const QStringList &list)
{  
 qStableSort(list.begin(), list.end(), caseInsensitiveLessThan);
}

Если функтор пытаюсь сделать членом класса, story.h:
Код
C++ (Qt)
#include <QObject>
#include <QString>
#include <QStringList>
#include <QtAlgorithms>
 
class Story: public QObject
{
 Q_OBJECT
 
public:
 
...
 bool caseInsensitiveLessThan(const QString &s1, const QString &s2)
 {
     return s1.toLower() < s2.toLower();
 }
...
 

Этот код не срабатывает:
Код
C++ (Qt)
#include "story.h"
 
void Story::importFromClipboard(const QStringList &list)
{  
 qStableSort(list.begin(), list.end(), caseInsensitiveLessThan);
}

Что не правильно делаю и как все таки верно оформить?
38  Qt / Model-View (MV) / Re: QSortFilterProxyModel - фильтр по списку : Май 02, 2015, 18:56
Снова способ проб и ошибок дал результат. Все очень просто, не надо даже перезаряжать модель-источник. Но как то халтурно:
Код
C++ (Qt)
void ProxyPaneWidget::resetProxy()
{
 m_proxyModel->sort(1);
}
39  Qt / Model-View (MV) / Re: QSortFilterProxyModel - фильтр по списку : Май 02, 2015, 18:04
Все таки не удается толком сбросить фильтрацию прокси модели после упорядочивания по возрастанию или убыванию. Сброс простой. emit resetFilter(); отсылает сигнал прокси модели выдать invalidate();. Далее перезаряжаем список источника m_sourse->importFromFile( m_ExportPath );:
Код
C++ (Qt)
void ProxyPaneWidget::resetProxy()
{
 emit resetFilter();
 m_sourse->importFromFile( m_ExportPath );
}

Код
C++ (Qt)
void ProxyModel::clearFilterSet()
{
 invalidate();
 reset();
}
reset(); - то же пробовал на всякий случай.
Список источника перезаряжается, что ведет к исходному упорядочиванию в виджете представления прокси модели.
Однако при добавлении очередного пункта в источник, автоматически весь список снова сортируется по возрастанию или убыванию в зависимости, что до этого было установлено. Т.е. invalidate(); не работает как ожидалось.
Иными словами не удается отменить сортировку.
В чем может быть ошибка?
40  Qt / Model-View (MV) / Re: QSortFilterProxyModel - фильтр по списку : Май 01, 2015, 06:58
Как то весьма не эффективно получается такое переопределение (намеренно упростил):
Код
C++ (Qt)
bool ProxyModel::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const
{
 QString word = sourceModel()->data(sourceModel()->index(sourceRow, 0, sourceParent)).toString();
 qDebug() << "word" << word;
 
 return true;
}
При добавлении нового пункта в список, весь список идет полностью по кругу через фильтр.
Или это происходит потому, что пункт добавляю в модель-источник?
41  Qt / Model-View (MV) / Re: QSortFilterProxyModel - удаление строки : Апрель 30, 2015, 15:56
Спасибо всем за разъяснения!
Здесь более/менее для себя разобрался и вывел приемлемый вариант действий.
42  Qt / Model-View (MV) / Re: QSortFilterProxyModel - удаление строки : Апрель 30, 2015, 08:04
Более правильно наверное так:
Код
C++ (Qt)
void ProxyPaneWidget::showCustomMenu(QPoint const & pos)
{
 bool selectionEmpty = m_proxyList->selectionModel()->selection().empty();
 
 QMenu m_proxyMenu( this );
 m_proxyMenu.addAction( tr( "Ascending" ), this, SLOT(sortAscendingOrder()) );
 m_proxyMenu.addAction( tr( "Descending" ), this, SLOT(sortDescendingOrder()) );
 m_proxyMenu.addAction( tr( "Reset" ), this, SLOT(resetProxy()) );
 
 if ( !selectionEmpty )
 {
   m_proxyMenu.addSeparator();
   m_proxyMenu.addAction( m_deleteAction );
 }
 
 m_proxyMenu.exec( m_proxyList->mapToGlobal( pos ) );
}
Экшены, как понял, в данном случае сами избирут  правильного родителя.
43  Qt / Model-View (MV) / Re: QSortFilterProxyModel - удаление строки : Апрель 29, 2015, 17:22
Однако, в последнем коде я все таки накуралесил:
m_proxyMenu.addAction( tr( "Ascending" ), &m_proxyMenu, SLOT(sortAscendingOrder()) );
Неверно это.
44  Qt / Model-View (MV) / Re: QSortFilterProxyModel - удаление строки : Апрель 29, 2015, 10:49
Спасибо! Что касается 36 ответа. Моя вина не подчистил при вставке и ввел в заблуждение. Впрочем и последнего поста со стилем касается. В конечном итоге конечно же не так все. Это пробы с черновиком. Постараюсь учесть, что бы в  следующий раз проще было бы понять мои каракули. Со стилем тоже будут вопросы, но наверное уже в ветке для новичков. Надо более менее выработать приемлемый.
По поводу текущего кода, вроде как более менее ясно и остановлюсь на последней заготовке и буду добавлять новые пункты.
И если честно в начале темы не все моменты осозновал, даже если мой первоначальный код вполне работал. Проблема отцов и детей ясно дело.
Не понимал почему мне приходилось назначать один и тот же Экшин удаления в констуркторе и меню. Не сразу понял, что назначал я его разным объектам. Вроде код то простой и учил все, но как то растерялся, а осознание пришло постепенно на практике.
Застрял я на этом меню, но думаю с пользой. Спасибо за терпение.

P.S. Наверное главная моя ошибка заключалась в том, что я пытался использовать экшин до создания объекта Улыбающийся.
45  Qt / Model-View (MV) / Re: QSortFilterProxyModel - удаление строки : Апрель 29, 2015, 10:08
Пока как понял, что бы действия жили только в момент вызова меню, делаем так:
Код
C++ (Qt)
void ProxyPaneWidget::showCustomMenu(QPoint const & pos)
{
 bool selectionEmpty = m_proxyList->selectionModel()->selection().empty();
 
 QMenu m_proxyMenu( this );
 m_proxyMenu.addAction( tr( "Ascending" ), &m_proxyMenu, SLOT(sortAscendingOrder()) );
 m_proxyMenu.addAction( tr( "Descending" ), &m_proxyMenu, SLOT(sortDescendingOrder()) );
 m_proxyMenu.addAction( tr( "Reset" ), &m_proxyMenu, SLOT(resetProxy()) );
 
 if ( !selectionEmpty )
 {
   m_proxyMenu.addSeparator();
   m_proxyMenu.addAction( m_deleteAction );
 }
 
 m_proxyMenu.exec( m_proxyList->mapToGlobal( pos ) );
}

m_deleteAction все же придется делать членом класса виджета, поскольку приходится привязывать это действие и к самому виджету
Код
C++ (Qt)
 explicit ProxyPaneWidget( QWidget * parent = 0 ) : QWidget( parent )
 {
   m_deleteAction = new QAction( this );
   m_deleteAction->setText( tr( "Delite" ) );
   m_deleteAction->setShortcut( QKeySequence::Delete ) ;
   m_deleteAction->setShortcutContext( Qt::WidgetWithChildrenShortcut );
 
   connect( m_deleteAction, SIGNAL( triggered() ),
            this, SLOT( deleteSelectedItem() ) );
 
   addAction( m_deleteAction );
 }
Страниц: 1 2 [3] 4 5 ... 9

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