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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Окно редактирования записи из QTableView  (Прочитано 7158 раз)
djfile
Гость
« : Декабрь 13, 2012, 20:58 »

Здравствуйте. Подскажите, как лучше сделать. Хочу создать QTableView, с соответствующей моделью, где будет несколько столбцов. Думаю редактирование организовать, так чтобы, по двойному клику по строке открывалось окно, где будут перечислены те же значения, что и в строке таблицы, но уже парами: QLabel - QLineEdit(или что-то другое).
Вопрос в том, как лучше передавать данные из таблицы в окно и потом по клику на ОК обратно? Или есть другие варианты, более Qt-way?
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #1 : Декабрь 13, 2012, 22:03 »

если редактор предполагается быть модальным, то считывать результирующие строки по выходе из exec(), иначе — сигналы-слоты.

ну а передавать в редактор — через конструктор и/или сеттеры.
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
djfile
Гость
« Ответ #2 : Декабрь 13, 2012, 22:23 »

Понятно. Значит тупо в лоб=) Просто я один раз в другой программе так делал и был следующий глюк: я создавал окно при первом запуске, потом держал указатель на него и при следующем вызове также вызывал сеттеры, затем exec(), но при появлении в окне "мигали" значения, которые были при предыдущем вызове. Тогда я стал создавать окно на стеке, "мигать" перестало, но иногда интерфейс чуть притормаживал при создании.
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #3 : Декабрь 13, 2012, 22:28 »

widget->hide();
widget->set...();
...
widget->show();
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
djfile
Гость
« Ответ #4 : Декабрь 13, 2012, 22:33 »

Это в сеттерах окна?
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #5 : Декабрь 13, 2012, 22:49 »

это как выставлять новые значения без мигания старых (окно по идее не должно мигать)
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
djfile
Гость
« Ответ #6 : Декабрь 13, 2012, 23:32 »

Если я правильно понял, я раньше так и делал. Пользователь жмакал на строку, открывалось окно, в нём он что-то делал или ничего не делал, жал на OK или Cancel, окно естественно исчезало. Потом пользователь жал на другую строку и при открытии окна оно мегало, несмотря на то, что значения лайн едитов и пр. устанавливал до exec()
Записан
twp
Гость
« Ответ #7 : Декабрь 13, 2012, 23:38 »

widget->hide();
widget->set...();
...
widget->show();

а чего не так?

Код
C++ (Qt)
widget->setUpdatesEnabled(false);
widget->set...();
...
widget->setUpdatesEnabled(true);
 
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #8 : Декабрь 13, 2012, 23:53 »

а потому что я про этот метод забыл Улыбающийся
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
djfile
Гость
« Ответ #9 : Декабрь 14, 2012, 08:33 »


а чего не так?

Код
C++ (Qt)
widget->setUpdatesEnabled(false);
widget->set...();
...
widget->setUpdatesEnabled(true);
 


Вот про это не знал, спасибо.
Записан
panAlexey
Гипер активный житель
*****
Offline Offline

Сообщений: 864

Акцио ЗАРПЛАТА!!!!! :(


Просмотр профиля
« Ответ #10 : Декабрь 16, 2012, 16:58 »

Вопрос в том, как лучше передавать данные из таблицы в окно и потом по клику на ОК обратно? Или есть другие варианты, более Qt-way?
Тут кто как.
От задачи зависит. Я организовал нечто воде класса куда пакуется ответ.
Код:
class uoUrl
{
public:
    explicit uoUrl();
    uoUrl(QString url);
    uoUrl(QString table, int elem, uoFormType formtype,  int parent);
    uoUrl(QString table, int elem, int parent);
    uoUrl(uoElementData* el);

    uoFormType formType() const {return m_formType; }
    QString toString(bool withIID = false) const ;
    QString table() const { return m_table ;}
    int     element() const { return m_elem ;}
    int     parent()  const { return m_elemParent ;}
    bool    selection() const { return m_selection; }
    void    setSelection(bool sele){ m_selection = sele; }
    QString ovnerForm() const { return m_ovnerUrlForm; }
    void    setOvnerForm(QString oForm) { m_ovnerUrlForm = oForm; }
    void    setReadOnly(bool readOnly) { m_readOnly = readOnly; }
    void    setWithElem(bool with) { m_withElem = with; }

    bool    isFolder() { return (m_formType == uoFormT_Group) ? true : false; }
    bool    isElement() { return (m_formType == uoFormT_Elem) ? true : false; }
    bool    isList() { return (m_formType == uoFormT_List) ? true : false; }
    bool    isReadOnly() { return (m_readOnly) ? true : false; }
    bool    isWithElem() const { return m_withElem; }
private:
    void initEmpty();
    void parseUrl(QString url);
    QString    m_ovnerUrlForm; //форма из которой был вызван элемент и которую надо проинформировать об изменении.
    QString    m_table;
    uoUrlType  m_type;
    uoFormType m_formType;
    int        m_elem;
    int        m_elemParent;
    bool       m_selection; /// true = открыт подбор
    bool       m_withElem; /// true = вместе с элементами
    bool       m_readOnly; /// true = открыт подбор
    long       m_internalID;
};
Я встречал и задачи, когда форму надо открывать так, что-бы при определенных действиях она оповещала родительскую.
Есть у меня и заготовка в которую я "оборачиваю" подобные задачи: MDI интерфейс + некий ОРМ
Правда меня напроч не устраивают модели - много с ними гемороя. Предпочитаю самописное табличное поле.

ПС. Поскольку не очень люблю модальные окна (вернее их черезмерное использование), то пришлось изобрести (стырить из 1С Улыбающийся ) идею привязки объектов к окнам Улыбающийся Отсюда и родился класс uoUrl. Улыбающийся
« Последнее редактирование: Декабрь 16, 2012, 17:04 от panAlexey » Записан

Win Xp SP-2, Qt4.3.4/MinGW. http://trdm.1gb.ru/
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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